﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace PhanMemSapThoiKhoaBieu
{
    public partial class FormMonHocTheoKhoi : Form
    {
        public FormMonHocTheoKhoi()
        {
            InitializeComponent();
        }

        int soDongHienTai;
        int soDongBenPhải;
        //Load lên girldview những môn học của khối đó
        public void LoadKhoiMonHoc(string maKhoi)
        {
            int index = 0;
            DataTable monHocKhoi = Khoi_MonHocBUS.GetAllMonHocTheoKhoi(maKhoi);
            int tongSoMon = monHocKhoi.Rows.Count;
            soDongHienTai = tongSoMon - 1;
            tbTongSoMon.Text = tongSoMon.ToString();
            int tongSoTiet = 0;
            if (monHocKhoi.Rows.Count > 0)
            {
                foreach (DataRow dr in monHocKhoi.Rows)
                {
                    tongSoTiet += Convert.ToInt16(dr[1]);
                }
            }
            tbTongSoTiet.Text = tongSoTiet.ToString();
            dgvDanhSachMonDangHoc.Rows.Clear();
            foreach (DataRow dr in monHocKhoi.Rows)
            {
                dgvDanhSachMonDangHoc.Rows.Add();
                DataGridViewRow dgr = dgvDanhSachMonDangHoc.Rows[index];
                dgr.Cells["TenMonHoc"].Value = dr[0].ToString();
                dgr.Cells["SoTietTuan"].Value = dr[1];
                dgr.Cells["SoTietBuoi"].Value = dr[2];
                index++;
            }
            dgvDanhSachMonDangHoc.AllowUserToAddRows = false;
        }
        //Load lên girldview ra những môn không học của khối đó
        public void LoadMonHoc(string maKhoi)
        {
            int index = 0;
            DataTable monHocKhoi = Khoi_MonHocBUS.GetAllMonHoc(maKhoi);
            soDongBenPhải = monHocKhoi.Rows.Count;
            dgvDanhSachMonKhongHoc.Rows.Clear();
            foreach (DataRow dr in monHocKhoi.Rows)
            {
                dgvDanhSachMonKhongHoc.Rows.Add();
                DataGridViewRow dgr = dgvDanhSachMonKhongHoc.Rows[index];
                dgr.Cells["TenMonHocKhoi"].Value = dr[0].ToString();
                index++;
            }
            dgvDanhSachMonKhongHoc.AllowUserToAddRows = false;

        }


        private void FormMonHocTheoKhoi_Load(object sender, EventArgs e)
        {
            List<KhoiDTO> lstKhoi = KhoiBUS.LayDanhSach();
            cbKhoi.DataSource = lstKhoi;
            cbKhoi.ValueMember = "ID";
            cbKhoi.DisplayMember = "TenKhoi";
        }

        private void cbKhoi_SelectedIndexChanged(object sender, EventArgs e)
        {
            string id = cbKhoi.SelectedValue.ToString();
            LoadKhoiMonHoc(id);
            LoadMonHoc(id);
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dgvDanhSachMonDangHoc.Rows.Count > 0)
            {
                int index = dgvDanhSachMonDangHoc.CurrentRow.Index;
                DataGridViewRow dgr = dgvDanhSachMonDangHoc.CurrentRow;
                //lấy số tiết
                int[] soTiet = new int[]{
                   Convert.ToInt16( dgr.Cells[1].Value.ToString())
                };
                string[] rowNew = new string[]{
                    dgr.Cells[0].Value.ToString()                 
                };
                dgvDanhSachMonKhongHoc.Rows.Add(rowNew);
                dgvDanhSachMonDangHoc.Rows.RemoveAt(index);
                int soTietHienTai = Convert.ToInt16(tbTongSoTiet.Text) - soTiet[0];
                tbTongSoTiet.Text = soTietHienTai.ToString();
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (dgvDanhSachMonKhongHoc.Rows.Count > 0)
            {
                int index = dgvDanhSachMonKhongHoc.CurrentRow.Index;
                DataGridViewRow dgr = dgvDanhSachMonKhongHoc.CurrentRow;
                string[] rowNew = new string[]{
                    dgr.Cells[0].Value.ToString(),
                    "0","0"
                };
                dgvDanhSachMonDangHoc.Rows.Add(rowNew);
                dgvDanhSachMonKhongHoc.Rows.RemoveAt(index);
            }
        }

        private void dgvDanhSachMonDangHoc_KeyUp(object sender, KeyEventArgs e)
        {
            int index = dgvDanhSachMonDangHoc.CurrentRow.Index;
            DataGridViewRow dgr = dgvDanhSachMonDangHoc.CurrentRow;
            int[] rowNew = new int[]{                   
                 Convert.ToInt16( dgr.Cells[1].Value.ToString())
               };
            int soTietHienTai = Convert.ToInt16(tbTongSoTiet.Text) + rowNew[0];
            tbTongSoTiet.Text = soTietHienTai.ToString();
        }

        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            int i = dgvDanhSachMonDangHoc.Rows.Count - 1;
            //xử lý girldview bên trái bắn qua
            for (int j = soDongHienTai + 1; j <= i; j++)
            {
                try
                {
                    string tenMonHoc = dgvDanhSachMonDangHoc.Rows[j].Cells[0].Value.ToString();
                    int soTiet = Convert.ToInt16(dgvDanhSachMonDangHoc.Rows[j].Cells[1].Value.ToString());
                    int soTietTrenBuoi = Convert.ToInt16(dgvDanhSachMonDangHoc.Rows[j].Cells[2].Value.ToString());
                    string id = cbKhoi.SelectedValue.ToString();
                    //lấy ra mã môn học của tên môn học đó
                    DataTable monHocKhoi = Khoi_MonHocBUS.GetMaMonHoc(tenMonHoc);
                    string maMonHoc = "";
                    if (monHocKhoi.Rows.Count > 0)
                    {
                        foreach (DataRow dr in monHocKhoi.Rows)
                        {
                            maMonHoc = dr[0].ToString();
                        }
                    }
                    try
                    {
                        //lúc này mình sẽ insert vào bảng khoi_monhoc
                        Khoi_MonHocDTO kmh = new Khoi_MonHocDTO();
                        kmh.IDKhoi = id;
                        kmh.IDMonHoc = maMonHoc;
                        kmh.SoTietPhaiHoc = soTiet;
                        kmh.SoTietTrenBuoi = soTietTrenBuoi;
                        bool kq = Khoi_MonHocBUS.Them(ref kmh);
                        if (kq == false)
                        {
                            MessageBox.Show("Cập nhật thất bại");
                            return;
                        }
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Cập nhật thất bại");
                    }

                }
                catch (Exception)
                {
                    MessageBox.Show("Cập nhật thất bại");
                }
            }
            //xử lý girldview bên phải bắn qua bên trái     
            for (int j = soDongBenPhải; j < dgvDanhSachMonKhongHoc.Rows.Count; j++)
            {
                try
                {
                    string tenMonHoc = dgvDanhSachMonKhongHoc.Rows[j].Cells[0].Value.ToString();
                    string id = cbKhoi.SelectedValue.ToString();
                    //lấy ra mã môn học của tên môn học đó
                    DataTable monHocKhoi = Khoi_MonHocBUS.GetMaMonHoc(tenMonHoc);
                    string maMonHoc = "";
                    if (monHocKhoi.Rows.Count > 0)
                    {
                        foreach (DataRow dr in monHocKhoi.Rows)
                        {
                            maMonHoc = dr[0].ToString();
                        }
                    }
                    try
                    {
                        //lúc này mình sẽ delete vào idkhoi và idmonhoc  khoi_monhoc
                        bool kq = Khoi_MonHocBUS.Xoa(maMonHoc, id);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Delete thất bại");
                    }

                }
                catch (Exception)
                {
                    MessageBox.Show("Cập nhật thất bại");
                }
            }
            MessageBox.Show("Đã cập nhật xong dữ liệu môn học của khối");
            LoadKhoiMonHoc(cbKhoi.SelectedValue.ToString());
            LoadMonHoc(cbKhoi.SelectedValue.ToString());
        }
    }
}
